package com.zhuty.aiBioHelper.service;

import com.zhuty.aiBioHelper.ai.guardrail.SafeInputGuardrail;
import com.zhuty.aiBioHelper.enums.AiRoleType;
import dev.langchain4j.service.*;
import dev.langchain4j.service.guardrail.InputGuardrails;
import reactor.core.publisher.Flux;

import java.util.List;

/**
 * 医疗基因学AI服务接口
 * 专门处理基因与疾病关联分析、遗传机制解释等医疗领域问题
 * 
 * @author zhuty
 */
@InputGuardrails({SafeInputGuardrail.class})
public interface MedicalGeneticsService extends BaseAiService {
    
    @Override
    default AiRoleType getSupportedRoleType() {
        return AiRoleType.MEDICAL_GENETICS;
    }
    
    /**
     * 基础医疗基因学咨询
     */
    @SystemMessage(fromResource = "system-prompt-medical.txt")
    @Override
    String chat(String userMessage);
    
    /**
     * 生成基因学报告
     * 
     * @param userMessage 用户输入的基因信息
     * @return 结构化的基因学报告
     */
    @SystemMessage(fromResource = "system-prompt-medical.txt")
    GeneticsReport generateGeneticsReport(String userMessage);
    
    /**
     * 带RAG检索增强的医疗咨询
     */
    @SystemMessage(fromResource = "system-prompt-medical.txt")
    @Override
    Result<String> chatWithRag(String userMessage);
    
    /**
     * 流式医疗咨询
     */
    @Override
    Flux<String> chatStream(@MemoryId int memoryId, @UserMessage String userMessage);
    
    /**
     * 基因学报告数据结构
     * 
     * @param patientName 患者姓名
     * @param geneVariants 基因变异信息
     * @param riskAssessment 风险评估
     * @param clinicalRecommendations 临床建议
     * @param followUpActions 后续行动建议
     */
    record GeneticsReport(
        String patientName,
        List<String> geneVariants,
        String riskAssessment,
        List<String> clinicalRecommendations,
        List<String> followUpActions
    ) {}
}